Micron Document
welo git mirrors

Node / public / reticulum / commits / d8f0380

Commit d8f0380aa94ef9e0e1b9cb96746bc95bddea52dd


Parents : 569f9bd
Author : Mark Qvist <mark@unsigned.io>
Date : 2021-09-18T20:10:39+02:00

Work on tunnels

Changes

1 files changed, 28 insertions(+), 3 deletions(-)


Diff

diff --git a/RNS/Transport.py b/RNS/Transport.py
index 42e0a0605..b74df2cb5 100755
--- a/RNS/Transport.py
+++ b/RNS/Transport.py
@@ -34,7 +34,7 @@ class Transport:
PATHFINDER_R = 1 # Retransmit retries
PATHFINDER_T = 10 # Retry grace period
PATHFINDER_RW = 10 # Random window for announce rebroadcast
- PATHFINDER_E = 60*15 # Path expiration in seconds
+ PATHFINDER_E = 25 # Path expiration in seconds
# TODO: Calculate an optimal number for this in
# various situations
@@ -296,6 +296,16 @@ class Transport:
stale_paths.append(destination_hash)
RNS.log("Path to "+RNS.prettyhexrep(destination_hash)+" was removed since the attached interface no longer exists", RNS.LOG_DEBUG)
+ # Cull the tunnel table
+ stale_tunnels = []
+ for tunnel_id in Transport.tunnels:
+ tunnel_entry = Transport.tunnels[tunnel_id]
+
+ expires = tunnel_entry[3]
+ if time.time() > expires:
+ stale_tunnels.append(tunnel_id)
+ RNS.log("Tunnel "+RNS.prettyhexrep(tunnel_id)+" timed out and was removed", RNS.LOG_DEBUG)
+
i = 0
for link_id in stale_links:
Transport.link_table.pop(link_id)
@@ -318,6 +328,17 @@ class Transport:
else:
RNS.log("Removed "+str(i)+" paths", RNS.LOG_DEBUG)
+ i = 0
+ for tunnel_id in stale_tunnels:
+ Transport.tunnels.pop(tunnel_id)
+ i += 1
+
+ if i > 0:
+ if i == 1:
+ RNS.log("Removed "+str(i)+" tunnel", RNS.LOG_DEBUG)
+ else:
+ RNS.log("Removed "+str(i)+" tunnels", RNS.LOG_DEBUG)
+
Transport.tables_last_culled = time.time()
except Exception as e:
@@ -791,6 +812,8 @@ class Transport:
tunnel_entry = Transport.tunnels[packet.receiving_interface.tunnel_id]
paths = tunnel_entry[2]
paths[packet.destination_hash] = destination_table_entry
+ expires = time.time() + Transport.PATHFINDER_E
+ tunnel_entry[3] = expires
RNS.log("Path to "+RNS.prettyhexrep(packet.destination_hash)+" associated with tunnel "+RNS.prettyhexrep(packet.receiving_interface.tunnel_id), RNS.LOG_VERBOSE)
# Call externally registered callbacks from apps
@@ -986,16 +1009,18 @@ class Transport:
@staticmethod
def handle_tunnel(tunnel_id, interface):
+ expires = time.time() + Transport.PATHFINDER_E
if not tunnel_id in Transport.tunnels:
RNS.log("Tunnel endpoint "+RNS.prettyhexrep(tunnel_id)+" established.", RNS.LOG_DEBUG)
paths = {}
- tunnel_entry = [tunnel_id, interface, paths]
+ tunnel_entry = [tunnel_id, interface, paths, expires]
interface.tunnel_id = tunnel_id
Transport.tunnels[tunnel_id] = tunnel_entry
else:
RNS.log("Tunnel endpoint "+RNS.prettyhexrep(tunnel_id)+" reappeared. Restoring paths...", RNS.LOG_DEBUG)
tunnel_entry = Transport.tunnels[tunnel_id]
tunnel_entry[1] = interface
+ tunnel_entry[3] = expires
interface.tunnel_id = tunnel_id
paths = tunnel_entry[2]
@@ -1022,7 +1047,7 @@ class Transport:
if should_add:
Transport.destination_table[destination_hash] = new_entry
- RNS.log("Restored path to "+RNS.prettyhexrep(packet.destination_hash)+" is now "+str(announce_hops)+" hops away via "+RNS.prettyhexrep(received_from)+" on "+str(packet.receiving_interface), RNS.LOG_VERBOSE)
+ RNS.log("Restored path to "+RNS.prettyhexrep(packet.destination_hash)+" is now "+str(announce_hops)+" hops away via "+RNS.prettyhexrep(received_from)+" on "+str(receiving_interface), RNS.LOG_VERBOSE)

Served by rngit 1.5.1 - Generated in 0.12s